#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <unordered_map>
//水果成篮：https://leetcode.cn/problems/fruit-into-baskets/description/
using namespace std;
class Solution {
    //思路： 用哈希表存遍历过程中的各种类水果的数量
    //      题目等价与： 找最大的子数组，使得数组内最多只有两种水果
    //      滑动条件：哈希表大小>2
    //      停止条件：哈希表的size<=2
public:
    int totalFruit(vector<int>& fruits) {
        int ret=0,n=fruits.size();
        unordered_map<int,int> e;
        for(int l=0,r=0;r<n;r++)
        {
            e[fruits[r]]++;
            while(e.size()>2)
            {
                e[fruits[l]]--;
                if(e[fruits[l]]==0)
                    e.erase(fruits[l]);
                l++;
            }
            ret=max(ret,r-l+1);
        }
        return ret; 
    }
};
